Dapr 集成 Flomesh 实现跨集群服务调用

您所在的位置:网站首页 golang fsm Dapr 集成 Flomesh 实现跨集群服务调用

Dapr 集成 Flomesh 实现跨集群服务调用

2023-02-26 10:16| 来源: 网络整理| 查看: 265

16770352471269.jpg

背景

随着技术和架构的不断演进,有着多运行时的态势:现代应用程序的基础能力不断地以独立运行时的方式从应用程序分离出来。这其中就有分布式应用运行时和服务网格两种运行时,今天这篇文章就为大家介绍 Dapr 与 Flomesh 服务网格的集成进行跨集群的服务调用来实现“真正的”多集群互联互通。

多集群

Kubernetes 秉持着松耦合和可扩展的设计理念,带来了 Kubernetes 生态的蓬勃发展。但这些大部分先限制在单一集群内,然后由于种种原因和目的企业内部创建的集群越来越多,比如单集群故障、监管要求、异地多机房可用区容灾、出于敏捷、降本考虑的混合云、多云部署、单一集群的承载能力受限、多版本 Kubernetes 集群共存等。

Dapr

Dapr 是一个分布式应用工具包,通过提供简单而稳定的 API 实现应用程序和外围功能组件的解耦合,让开发人员可以聚焦在业务功能的研发。同时与外围组件的解耦,也使得应用程序更加的便携、更加云原生,企业可以轻松低成本地将应用迁移到不同的环境中。

Dapr 工具包提供了丰富的功能,如服务调用、弹性策略、状态存储、发布/订阅、绑定、分布式锁、名称解析等,但对于高级的服务治理功能如灰度、跨集群服务调用没有支持。

Flomesh 服务网格

微服务架构兴起之后,随着规模越来越大,服务治理的难度和碎片化显著提升,服务网格的出现使得这些问题迎刃而解。服务网格是一个处理服务间通讯的专用的基础设施层,通过它可以透明地添加可观测性、流量管理和安全性等功能,而无需将其添加到你的代码中。

Flomesh 服务网格使用可编程代理 Pipy 为核心提供东西、南北向的流量管理。通过基于 L7 的流量管理能力,突破计算环境间的网络隔离,建议一个虚拟的平面网络,使不同计算环境中应用可以互相通信。可以想象,Flomesh 服务网格是覆盖多集群的“大网格”。

16770352471296.png

示例介绍

服务端 NodeApp 是个 Dapr 应用, 在 Dapr hello-kubernetes 示例 中的 NodeApp 基础上做了修改,返回响应时会显示当前的集群名;客户端 curl 用于向 NodeApp 发送请求,但并没有声明为 Dapr 应用。

16770352471305.png

NodeApp 中有三个 endpoint:

GET /ports 返回当前应用可访问的端口 POST /neworder 创建新的订单 GET /order 查询订单

下面的演示中会从集群的创建开始,一步步介绍环境的配置、各个组件的安装和配置、应用的部署等等。

一键安装脚本

我们也准备脚本进行一键安装和快速的体验,免除环境和组件配置的繁琐。可以 访问 GitHub 获取脚本 内容。

使用该脚本之前,需要确保系统装已经安装了 Docker 和 kubectl。脚本运行时会进行检查,并安装 k3d、helm、jq、pv 等工具。

flomesh.sh - 不提供任何参数,脚本会创建 4 个集群、完成环境安装配置并运行演示 flomesh.sh -h - 打印帮助信息 flomesh.sh -i - 创建 4 个集群、完成环境的安装和配置 flomesh.sh -d - 运行演示 flomesh.sh -r - 清理演示相关的资源 flomesh.sh -u - 删除所有集群

执行下面的命令,即可完成环境安装配置和演示的运行。

curl -sL https://raw.githubusercontent.com/addozhang/flomesh-dapr-demo/main/flomesh.sh | bash - 逐步演示 前提条件

进行演示,我们需要如下的工具:

Docker Kubectl K3d Helm kubectx 创建多集群

获取本机 IP 地址作为集群间的通信地址。

export HOST_IP=10.0.0.13

执行下面创建 4 个集群:control-plane、cluster-1、cluster-2 和 cluster-3。

API_PORT=6444 #6444 6445 6446 6447 PORT=80 #81 82 83 for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 do k3d cluster create ${CLUSTER_NAME} \ --image docker.io/rancher/k3s:v1.23.8-k3s2 \ --api-port "${HOST_IP}:${API_PORT}" \ --port "${PORT}:80@server:0" \ --servers-memory 4g \ --k3s-arg "--disable=traefik@server:0" \ --network multi-clusters \ --timeout 120s \ --wait ((API_PORT=API_PORT+1)) ((PORT=PORT+1)) done 安装 FSM helm repo add fsm https://charts.flomesh.io helm repo update export FSM_NAMESPACE=flomesh export FSM_VERSION=0.2.1-alpha.3 for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 do kubectx k3d-${CLUSTER_NAME} sleep 1 helm install --namespace ${FSM_NAMESPACE} --create-namespace --version=${FSM_VERSION} --set fsm.logLevel=5 fsm fsm/fsm sleep 1 kubectl wait --for=condition=ready pod --all -n $FSM_NAMESPACE --timeout=120s done

将集群 cluster-1、cluster-2 和 cluster-3 纳入集群 control-plane 的管理。

kubectx k3d-control-plane sleep 1 PORT=81 for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 do kubectl apply -f -


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3